PLUGIN MANAGER: (this is a work in progress)
refer to as "pluginmgr"

I want to thank my testers and people who are on the "team" who
helped provide feedback here. This is NOT complete, there is more
to come, i will open a thread...

ONE THING FOR SURE, BEFORE YOUR POST... REVIEW THE DEBUG.txt
ITS VERY INFORMATIVE NOW


----------------------------------------------------------------------
LOADING OF PLUGINS:
----------------------------------------------------------------------
(debug.txt information expanded)
Plugins are now loaded via 3 methods, in this order: GLOBAL, SKINDIR, "menu.skin"

[All plugins must meet the required class (.RRExtension) and be registered as com]
[Duplicated entries will not load]
  
  -GLOBAL:  			The "Road Runner/Plugins/" directory is searched for .dlls that qualify (recusively)
            			when found, they are tested for REQUIREMENTS and loaded. This type of plug in
            			is ONLY loaded ONCE, and never unloaded (except shutdown). Some good examples would be
            			"Skintool", "RRExtended", "MJSGUAS" and radio plugins.
            
  -SKINDIR: 			The "SKINPATH/Plugins/" ("SKINPATH" is the current skin directory)
  								directory is searched for .dlls that qualify (recusively)
            			when found, they are tested for requirements and loaded. This type of plug in
            			is loaded and unloaded as required by skinchange.
            
	- "menu.skin": 	same as before, loaded based on skin code "X,pluginname"
									they are tested for requirements and loaded. This type of plug in
           			 	is loaded and unloaded as required by skinchange.
            
Notes:            
	To simply have a skin use a plugin, install it in the skinpath, example "movietimes"
  "C:\Program Files\Road Runner\Skins\Carwings_Dynamic\Plugins\MovieTimes"
  no more NEED to edit menu.skin or some skins use "plugins.txt" 
  if you prefer, continue to use the "menu.skin" method.
  also, if two skins, say need the same plug in, just dupe the .dll in each skin
  only the REGISTERED dll is technically loaded and run. Of course if you keep using the
  same plug in over and over, put it in the globals.


MANAGEMENT:
SKIN COMMANDS:
----------------------------------------------------------------------
"pluginmgr"  - loads plugin manager (pluginmgr.skin)
   DL is automaticly loaded with list of loaded plugins (DLTEXT contains selected plugin name)
   
"pluginmgr;list" load DL list with loaded plugins  [might not be needed]

"pluginmgr;enable|xxx" - enables plugin named "xxx"
   calls plugin method: Enabled(True) *
   
"pluginmgr;disable|xxx" - enables plugin named "xxx"
   calls plugin method: Enabled(False) *


LABELS:
----------------------------------------------------------------------
"pluginmgr|count"  				- returns count of loaded plugins

"pluginmgr|status|xxx" 		- returns "enabled"/"disabled" for given plugin name "xxx"

"pluginmgr|loadtype|xxx" 	- returns "global"/"skinpath"/"menu.skin" for given plugin name "xxx"

"pluginmgr|version|xxx" 		- returns plugin's version information for given plugin name "xxx"
"pluginmgr|description|xxx"	- returns plugin's description for given plugin name "xxx"
"pluginmgr|category|xxx"		- returns plugin's category for given plugin name "xxx"  [FUTURE, TBD]
"pluginmgr|supporturl|xxx" 	- returns plugin's support url for given plugin name "xxx"


INDICATORS:
----------------------------------------------------------------------
pluginmgr|status|xxx" 		- returns "True"/"False" (if plug in is enabled, nothing if invalid name)

pluginmgr|loaded|xxx" 		- returns "True"/"False" (if plug in is loaded)


VARIABLES:
----------------------------------------------------------------------
"pluginxxx"								- returns name of plugin "xxx" where xxx is 001, 002, 003... 00n up to COUNT


NOTES:
* NEW FUNCTIONS TO BE IMPLEMENTED IN THE PLUGIN
vb6 example:

public Initialize(pluginDataPath as string)

end function

pluginDataPath contains a valid directory path, that MAY need to be created(test for it 1st)
this is where any settings/data for this specific plugin should be stored
internal file manager will control the location of this path
if you of course have no data to save or as such, you dont need to do anything here
this Initialize function is called right when the plugin is introduced to RideRunner
it should be used to do any one time tasks.
you can GetInfo on any RR var at this time

rrpath        (riderunner.exe)
rrdatapath    (general user data)
rrconfigpath  (core config, ie rr.ini)
rrcachepath   (temp files)

-------------------------------------------------------------------------

public function Enabled(state as boolean)
		Enabled = state ' set global var to current state
		' do anything you might want
end function

Then use "Enabled" var to prevent calls into the SDK
ie if Enabled = false you SHOULD NOT call Execute, GetInd, or GetInfo, or any of the EXPOSED SDK Class
While the plugin is disabled RR will NOT call any of the RRExtension Class methods,
example: ProcessCommand, ReturnLabel
when the plugin is becomes enabled again, the call to RRExtension.Enabled(true) will be made.
some recoding of existing plugins might be need
also to note since SOME plugins are PULL, not PUSH, no update is required.
it will depend on the plug in, and if you want to go back and support enable/disable


I have created a NEW RRExtension VB Project, which subclasses the RideRunner SDK
so no extra code has to be coded to handle the new Enabled/Disabled
just use the NEW CLASS  (RRSDK)

-Mitch 

